﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebChat.Models;

namespace WebChat.Controllers
{
    /// <summary>
    /// Message sin Controller, tar seg av alle beskjeder.
    /// For det meste er dette admin metoder, men Submit lar deg poste en beskjed
    /// </summary>
    public class MessageController : Controller
    {
        private MessageRepository messageRep;
        private UserRepository userRep;


        /// <summary>
        /// Kontruktør
        /// </summary>
        public MessageController()
        {
            messageRep = new MessageRepository();
            userRep = new UserRepository();
        }

        /// <summary>
        /// Her lagrer man en beskjed i databasen
        /// </summary>
        /// <param name="collection"></param>
        /// <returns></returns>
        [Authorize]
        public string Submit(FormCollection collection)
        {
            try
            {
                Message mess = new Message();
                Chatroom chat = new Chatroom();
                Image image = new Image();
                HttpPostedFileBase file;
                
                //Logikk for å lagre en beskjed i databasen
                mess.Date = System.DateTime.Now;
                mess.AuthorId = userRep.getUserId(User.Identity.Name);
                UpdateModel(chat, "chat");
                UpdateModel(mess, "mess");
                mess.Chatroom = chat.Id;
                if (mess.Message1 != null) //Skjekker om beskjeder er tom
                {
                    if (mess.Message1.Length > 145) 
                    {
                        return "Må være under 145 tegn";
                    }
                }

                file = Request.Files[0];
                if (file.ContentLength > 5000000)
                {
                    return "Størrelsen på filen må være under 5Mb.";
                }
                //Logikk for å få bilde inn i databasen
                if (file.ContentLength > 0)
                {
                    image.imageName = file.FileName;
                    image.imageSize = file.ContentLength;
                    image.imageType = file.ContentType;
                    byte[] theImage = new byte[file.ContentLength];
                    file.InputStream.Read(theImage, 0, (int)file.ContentLength);

                    image.image1 = theImage;
                    mess.imageId = messageRep.addImage(image);
                }

                messageRep.addMessage(mess);

                return "";
            }
            catch(Exception e)
            {
                Exception skjekkmeg = e;
                return "Error";
            }
        }
        
        /// <summary>
        /// For nedlastningslenke til fil
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult Download(int id)
        {
            Image fil = messageRep.getFile(id);

            return File(fil.image1.ToArray(), "application/octet-stream", fil.imageName);
        }
        /// <summary>
        /// For å vise bildet
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult Image(int id)
        {
            Image fil = messageRep.getFile(id);
            
            return File(fil.image1.ToArray(), fil.imageType);
        }
    }
}
